昨天完成全場清除技能,今天接著做第二個技能:能讓場上的目標暫時降低移動速度。
這次的技能需要消耗150點擊殺數,使用後會讓目前場上的殭屍速度降低至原本的50%,持續5秒。
技能觸發跟第一個技能一樣,擊殺數到了會亮起來,點按即可使用,這裡就不多做贅述。
首先修改原本的SkillManager新增緩速技能的觸發方法與持續時間判斷。當使用時就會對目前場上的殭屍套用緩速效果,並在5秒後恢復速度。
// 【技能二:全場緩速 5 秒】
public void TriggerSlowDownSkill()
{
if (ScoreManager.Instance != null && ScoreManager.Instance.UseSkill2())
{
StartCoroutine(SlowDownRoutine());
Debug.Log("【技能發動】全場緩速 5 秒!");
}
else
{
Debug.Log("擊殺數不足 150,無法施放緩速技能!");
}
}
private IEnumerator SlowDownRoutine()
{
// 1. 抓出場上所有殭屍,施加 50% 緩速
Target[] allTargets = FindObjectsOfType<Target>();
foreach (Target target in allTargets)
{
if (target != null)
{
target.ApplySlowEffect(0.5f);
}
}
// 2. 持續 5 秒
yield return new WaitForSeconds(5.0f);
// 3. 5 秒後再次抓出場上還活著的殭屍,恢復原始速度!
Target[] remainingTargets = FindObjectsOfType<Target>();
foreach (Target target in remainingTargets)
{
if (target != null)
{
target.RemoveSlowEffect();
}
}
Debug.Log("【緩速結束】場上殭屍速度已恢復原狀!");
}
接著修改Target,新增原始速度紀錄與緩速狀態,避免緩速結束後無法恢復原本的速度。
除了新增ApplySlowEffect()和RemoveSlowEffect()之外,也需要在原本的SetSpeedAndDuration()中更新速度備份,確保能恢復到依照階級調整後的速度。
以下只列出這次新增或修改的部分:
// 緩速狀態管理
private float originalSpeed; // 備份原始速度
private bool isSlowed = false; // 是否處於緩速狀態
private void Start()
{
currentHp = maxHp;
startPos = transform.position;
targetPos = startPos + new Vector3(0, riseDistance, 0);
// 紀錄最一開始的原始速度,做為後續還原基準
originalSpeed = speed;
targetRoutine = StartCoroutine(TargetRoutine());
}
// 【技能二】套用緩速效果
public void ApplySlowEffect(float slowMultiplier)
{
if (isSlowed) return; // 避免重複套用
isSlowed = true;
originalSpeed = speed; // 再次確認備份當前速度
speed *= slowMultiplier; // 降低速度(例如變成 0.5 倍)
}
// 【技能二】還原原始速度
public void RemoveSlowEffect()
{
if (!isSlowed) return;
speed = originalSpeed; // 恢復成原本的速度
isSlowed = false;
}
// 動態調整速度與停留時間(階梯式加速用)
public void SetSpeedAndDuration(float speedMultiplier, float durationMultiplier)
{
speed *= speedMultiplier;
showDuration *= durationMultiplier;
originalSpeed = speed; // 更新備份速度
}
這樣就能讓目前場上的殭屍暫時降低移動速度,並在5秒後恢復。這次的技能只會影響發動時場上已經存在的殭屍,新生成的殭屍仍會維持正常速度。
今天主要完成了以下幾個部分: